<!DOCTYPE html PUBLIC "-//W3C//DTD HTML EXPERIMENTAL 970324//EN">
<html><head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-2">
<meta name="GENERATOR" content="Adobe FrameMaker 5.5/HTML Export Filter">
<link rel="STYLESHEET" href="sdl_t01_data/sdl_t03.css">
<title> SDL by example</title></head>
<body bgcolor="#ffffff">
<div>
<h2 class="over1">
<a name="pgfId=9206">
 </a>
<a name="SDL by example">
 </a>
SDL <a name="top">
 </a>
by example</h2>
<div>
<map name="sdl_t03-1">
<area shape="RECT" coords="5,0,25,17" href="http://time.sintef9013.com/elb/sdl/sdl_t02.htm#end%20t02">
</map>
<img src="sdl_t01_data/sdl_t03-1.gif" usemap="#sdl_t03-1">
</div>
<p class="avsnitt">
<a name="pgfId=10536">
 </a>
This part of the SDL tutorial leads you through SDL by means of an 
example. You will learn about the various elements of SDL by clicking on
 the desired elements in the diagrams. In case parts of a diagram 
reference other diagrams, e.g. process references, clicking the name (in
 <em class="HyperlinkNewWindow">
underlined blue</em>
 or <em class="Hyperlink">
red</em>
) will follow the reference and bring you to the referenced diagram.</p>
<p class="avsnitt">
<a name="pgfId=7942">
 </a>
If you want to be lead through the example top down, start with <a href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#21206" class="XRef">
 <em class="Hyperlink">
"System diagram, Access Control System"</em>
</a>
 and follow the diagram references from there.You may alternatively 
choose to look at the kind of diagram you want to learn about.</p>
<p class="avsnitt">
<a name="pgfId=51542">
 </a>
<a href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#27748" class="XRef">
 <em class="Hyperlink">
"Introduction to the example"</em>
</a>
 gives a short, informal introduction to the example being used throughout.</p>
<ul>
<li class="liste.">
<a name="pgfId=7951">
 </a>
<a href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#19993" class="XRef">
<em class="Hyperlink">
Package diagram, SignalLib</em>
</a>
</li>
<li class="liste.">
<a name="pgfId=7931">
 </a>
<a href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#35355" class="XRef">
<em class="Hyperlink">
Package diagram, AccessPointLib</em>
</a>
</li>
<li class="liste.">
<a name="pgfId=7955">
 </a>
<a href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#33835" class="XRef">
<em class="Hyperlink">
Block type diagram, AccessPoint</em>
</a>
</li>
<li class="liste.">
<a name="pgfId=7998">
 </a>
<a href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#12571" class="XRef">
<em class="Hyperlink">
Block type diagram, BlockingAccessPoint</em>
</a>
</li>
<li class="liste.">
<a name="pgfId=8003">
 </a>
<a href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#20653" class="XRef">
<em class="Hyperlink">
Block type diagram, LoggingAccessPoint</em>
</a>
</li>
<li class="liste.">
<a name="pgfId=8008">
 </a>
<a href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#22263" class="XRef">
<em class="Hyperlink">
Process type diagram, Controller</em>
</a>
</li>
<li class="liste.">
<a name="pgfId=8241">
 </a>
<a href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#34547" class="XRef">
<em class="Hyperlink">
Process type diagram, redefined Controller in BlockingAccessPoint</em>
</a>
</li>
<li class="liste.">
<a name="pgfId=8246">
 </a>
<a href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#35315" class="XRef">
<em class="Hyperlink">
Process type diagram, finalised Controller in LoggingAccessPoint</em>
</a>
</li>
<li class="liste.">
<a name="pgfId=10585">
 </a>
<a href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#10481" class="XRef">
<em class="Hyperlink">
Process diagram, Panel in terms of services</em>
</a>
</li>
<li class="liste.">
<a name="pgfId=10586">
 </a>
<a href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#36146" class="XRef">
<em class="Hyperlink">
Service diagram, PanelControl</em>
</a>
</li>
<li class="liste.">
<a name="pgfId=73555">
 </a>
<a href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#36020" class="XRef">
<em class="Hyperlink">
Procedure diagram, GetPIN</em>
</a>
</li>
</ul>
<p class="over2">
<a name="pgfId=51547">
 </a>
<a name="27748">
 </a>
Introduction to the example</p>
<p class="avsnitt">
<a name="pgfId=58282">
 </a>
The purpose of access control systems is in general to control the 
access to some service to people with known identity, represented by 
cards and personal codes. In this specific example the system shall 
control access to access zones by controlling the opening of doors.</p>
<p class="avsnitt">
<a name="pgfId=185671">
 </a>
Each card holds a unique Card-code that identifies the card. To grant 
access the system will read the Card-code and then check the 
corresponding access right. For additional authentication, the user will
 be asked to enter the secret personal number (PIN).</p>
<dl>
<dt class="figur">
<a name="pgfId=195617">
 </a>
Figure 15:	 <a name="41640">
 </a>
Panel <a name="top">
 </a>
and card of an access control system</dt>
<dl>
<dt class="figurelink">
<a name="pgfId=195755">
 </a>
<a href="http://time.sintef9013.com/elb/sdl/sdl_f10.htm#top" class="Hypertext">
Open figure</a>
</dt>
</dl>
</dl>
<div>
<img src="sdl_t01_data/sdl_t03-2.gif">
</div>
<p class="avsnitt">
<a name="pgfId=185672">
 </a>
&nbsp;</p>
<p class="avsnitt">
<a name="pgfId=92561">
 </a>
The card is a plastic card with a magnetic strip holding a card code and
 possibly an encrypted PIN code. The physical appearance of the panel 
and the card is shown in <a href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#41640" class="XRef">
<em class="Hyperlink">
Figure "Panel and card of an access control system"</em>
</a>
. Each panel represents an Access <a name="PanelAndCard">
 </a>
Point.</p>
<p class="avsnitt">
<a name="pgfId=58307">
 </a>
The main service demanded by the user is to gain access when the card 
and code is presented to the system, and to deny access if an attempt is
 made to enter at an access point where the user is not authorised to 
pass.</p>
<p class="avsnitt">
<a name="pgfId=58308">
 </a>
A typical access control system will consist of a number of access 
points and a central unit where validation is performed. Some access 
points are so-called blocking access points, that is access points that 
may be blocked by an operator, so that access is denied even with a 
valid card and code, until the access point is enabled again. Other 
access point may have the property that they log what is going on at the
 point.</p>
<p class="avsnitt">
<a name="pgfId=101296">
 </a>
In order to illustrate as many mechanism of SDL as possible, the example
 system will consist of three sets of access points, each of a different
 type. In a real access control system one may choose to give all access
 points the possibility of being blocked and of logging.</p>
<p class="over2">
<a name="pgfId=101794">
 </a>
<a name="21206">
 </a>
System <a name="System diagram, Access Control System">
 </a>
diagram, Access Control System</p>
<dl>
<dt class="figur">
<a name="pgfId=225885">
 </a>
Figure 16:	 <a name="12040">
 </a>
System <a name="top">
 </a>
diagram for access control system with three types of access points</dt>
<dl>
<dt class="figurelink">
<a name="pgfId=226159">
 </a>
<a href="http://time.sintef9013.com/elb/sdl/sdl_f08.htm#top" class="Hypertext">
Open fiure</a>
</dt>
</dl>
</dl>
<div>
<map name="sdl_t03-3">
<area shape="RECT" coords="99,202,164,229" href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#BlockingAccessPoint">
<area shape="RECT" coords="104,265,166,292" href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#LoggingAccessPoint">
<area shape="RECT" coords="333,195,391,208" href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#CentralUnit">
<area shape="RECT" coords="19,66,397,78" href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#AccessPointLib">
<area shape="RECT" coords="19,66,397,78" href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#AccessPointLib">
<area shape="RECT" coords="19,66,397,78" href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#AccessPointLib">
<area shape="RECT" coords="19,66,397,78" href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#AccessPointLib">
<area shape="RECT" coords="19,66,397,78" href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#AccessPointLib">
<area shape="RECT" coords="19,66,397,78" href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#AccessPointLib">
<area shape="RECT" coords="21,49,105,60" href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#SignalLib">
<area shape="RECT" coords="103,150,168,160" href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#AccessPoint">
<area shape="RECT" coords="269,333,325,344" href="http://time.sintef9013.com/elb/sdl/sdl_d03.htm#top">
<area shape="RECT" coords="85,325,177,354" href="http://time.sintef9013.com/elb/sdl/sdl_d06.htm#top">
<area shape="RECT" coords="28,325,63,354" href="http://time.sintef9013.com/elb/sdl/sdl_d33.htm#top">
<area shape="RECT" coords="205,14,325,25" href="http://time.sintef9013.com/elb/sdl/sdl_d01.htm#top">
<area shape="RECT" coords="333,333,403,344" href="http://time.sintef9013.com/elb/sdl/sdl_d05.htm#top">
<area shape="RECT" coords="184,342,283,354" href="http://time.sintef9013.com/elb/sdl/sdl_d01.htm#top">
</map>
<img src="sdl_t01_data/sdl_t03-3.gif" usemap="#sdl_t03-3">
</div>
<p class="avsnitt">
<a name="pgfId=155752">
 </a>
&nbsp;</p>
<p class="avsnitt">
<a name="pgfId=95035">
 </a>
In SDL a system is defined by means of a system diagram. By making a 
system diagram it has been decided what is part of the system and what 
is part of the environment of the system.We choose to design the access 
control system such that the access terminals (called AccessPoints) are <em class="Emphasis">
within</em>
 the system, while the users actually getting access are <em class="Emphasis">
outside</em>
 the system. The CentralUnit containing the access rights is within the 
system, while for our current purpose, how the access rights information
 got into the CentralUnit is not described.</p>
<p class="avsnitt">
<a name="pgfId=93463">
 </a>
Before drawing this border between the system and the environment and 
thereby deciding what should be part of the system, a domain analysis 
will normally have taken place, different solutions will have been 
considered and different sketches of the system will have been tried 
out.</p>
<p class="avsnitt">
<a name="pgfId=74380">
 </a>
In this presentation, the final system description is presented top-down, in order to present the various SDL language elements.</p>
<p class="avsnitt">
<a name="pgfId=62375">
 </a>
This Access Control <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d01.htm#top" class="Hypertext">
system</a>
</em>
 consists of one single <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d05.htm#top" class="Hypertext">
block</a>
</em>
 (CentralUnit) and three <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d06.htm#top" class="Hypertext">
block sets</a>
</em>
, that is sets of blocks according to block types, connected by <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d03.htm#top" class="Hypertext">
channels</a>
</em>
. It communicates with the <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d02.htm#top" class="Hypertext">
environment</a>
</em>
 that is supposed to behave like processes representing the users of the
 system, the operators and the controlled physical panels and doors at 
the access points.</p>
<div>
<h4 class="SideH">
<a name="pgfId=59579">
 </a>
System</h4>
<p class="avsnitt">
<a name="pgfId=59580">
 </a>
A system is in general a set of <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d05.htm#top" class="Hypertext">
blocks</a>
</em>
, block sets and channels. Blocks and <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d06.htm#top" class="Hypertext">
block sets</a>
</em>
 are connected with each other or with the environment of the system by means of <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d03.htm#top" class="Hypertext">
channels</a>
</em>
. This means e.g that there may not be processes directly as part of the system and systems will not have global variables.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=59616">
 </a>
Environment</h4>
<p class="avsnitt">
<a name="pgfId=59617">
 </a>
For the system the environment consists of a set of SDL processes that 
may send signals to the system and which may receive signals from the 
system. The signals for this purpose are defined in the system or, as 
here, in a package (<a href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#19993" class="XRef">
<em class="Hyperlink">
Package diagram, SignalLib</em>
</a>
) used by the system. The users of the system are thus regarded as processes in the environment.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=58797">
 </a>
Block</h4>
<p class="avsnitt">
<a name="pgfId=58799">
 </a>
A block is created as part of the creation of the enclosing block or 
system. All blocks are created as part of the system creation, that is 
there is no dynamic creation of blocks.</p>
<p class="avsnitt">
<a name="pgfId=58800">
 </a>
The CentralUnit block is specified directly (singular block), <img src="sdl_t01_data/sdl_t03-4.gif" align="LEFT">
while the other blocks of the system are parts of block sets according to block types. The symbol with CentralUnit is also a <em class="Emphasis">
reference</em>
 to a block diagram that describes the properties of the block.</p>
<p class="avsnitt">
<a name="pgfId=94754">
 </a>
Note that the block reference is merely a graphical shorthand for 
diagrams. Block references may be substituted by block diagrams, but the
 surrounding diagrams would be very crowded and illegible if diagrams 
could not be remotely referenced by block references. The reference 
defines the scope of the name.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=94755">
 </a>
block set</h4>
<p class="avsnitt">
<a name="pgfId=94756">
 </a>
Type-defined blocks are contained in block sets. A block set is a fixed 
number of blocks with properties according to a block type.<img src="sdl_t01_data/sdl_t03-5.gif" align="LEFT">
 The set of AccessPoints is called ap and the number (100) designates 
the cardinality of the set. A channel connected to a block set (via the 
gates e or C) will actually represent a set of channel instances.</p>
<p class="avsnitt">
<a name="pgfId=59432">
 </a>
A block set is <em class="Emphasis">
not</em>
 a reference (as CentralUnit). It defines a set of block instances, but 
it relies on the definition of the block type AccessPoint. This block 
type definition is not part of the system, but part of the <a href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#35355" class="XRef">
<em class="Hyperlink">
Package diagram, AccessPointLib</em>
</a>
 and defined in <a href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#33835" class="XRef">
 <em class="Hyperlink">
"Block type diagram, AccessPoint"</em>
</a>
.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=67735">
 </a>
channel</h4>
<p class="avsnitt">
<a name="pgfId=67736">
 </a>
Blocks and block sets are connected with each other and with the 
environment by means of channels. A channel is a one-way or two-way 
directed connection. It is characterised by the signals that it may 
carry. A channel has a signal list for each direction.</p>
<p class="avsnitt">
<a name="pgfId=67738">
 </a>
If there is no channel between two blocks, then processes in these two 
blocks cannot communicate by signal exchange. Processes may, however, 
communicate by means of remote procedure calls without channels 
connecting the enclosing blocks.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=67740">
 </a>
<em class="Emphasis">
delaying</em>
 channel</h4>
<p class="avsnitt">
<a name="pgfId=67911">
 </a>
A <em class="Emphasis">
delaying</em>
 channel is specified by a channel symbol with the arrows at the middle of the channel.<img src="sdl_t01_data/sdl_t03-6.gif" align="LEFT">
</p>
<p class="avsnitt">
<a name="pgfId=67752">
 </a>
The delay of signals is non-deterministic, but the order of signals is maintained.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=67753">
 </a>
<em class="Emphasis">
non-delaying</em>
 channel</h4>
<p class="avsnitt">
<a name="pgfId=67921">
 </a>
A <em class="Emphasis">
non-delaying</em>
 channel is specified as folows, that is with the arrows at the endpoints.<img src="sdl_t01_data/sdl_t03-7.gif" align="LEFT">
 Associated with each direction of a channel are the types of signals 
that may be conveyed by the channel. The list enclosed by the signal 
list symbol can be signals (as e.g. Code) or signal lists (as e.g. 
validity) enclosed in (). </p>
<p class="avsnitt">
<a name="pgfId=67767">
 </a>
Channels connected to the frame symbol represent the connections to the environment.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=50226">
 </a>
package reference clause</h4>
<p class="avsnitt">
<a name="pgfId=50227">
 </a>
A package reference clause specifies that a system diagram or package 
diagram use the definitions of other packages. The names following the 
"/" after the package name denotes the subset of the definitions that 
are used.<map name="sdl_t03-8">
<area shape="RECT" coords="10,21,125,33" href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#AccessPointLib">
<area shape="RECT" coords="9,6,93,17" href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#SignalLib">
</map>
<img src="sdl_t01_data/sdl_t03-8.gif" usemap="#sdl_t03-8" align="LEFT">
</p>
<p class="avsnitt">
<a name="pgfId=68302">
 </a>
The system uses the types defined in the packages SignalLib and the 
denoted types (AccessPoint, BlockingAccessPoint and LoggingAccessPoint) 
from the AccessPointLib package.</p>
<p class="over2">
<a name="pgfId=9010">
 </a>
<a name="19993">
 </a>
Package <a name="Package diagram, SignalLib">
 </a>
diagram, SignalLib</p>
<dl>
<dt class="figur">
<a name="pgfId=226168">
 </a>
Figure 17:	 <a name="37399">
 </a>
<a name="29829">
 </a>
Package diagram SignalLib<a name="top">
 </a>
</dt>
<dl>
<dt class="figurelink">
<a name="pgfId=226170">
 </a>
<a href="http://time.sintef9013.com/elb/sdl/sdl_f01.htm#top" class="Hypertext">
Open figure</a>
</dt>
</dl>
</dl>
<p class="avsnitt">
<a name="pgfId=226275">
 </a>
<map name="sdl_t03-9">
<area shape="RECT" coords="233,14,333,25" href="http://time.sintef9013.com/elb/sdl/sdl_d15.htm#top">
<area shape="RECT" coords="240,42,340,75" href="http://time.sintef9013.com/elb/sdl/sdl_d13.htm#top">
<area shape="RECT" coords="248,172,347,205" href="http://time.sintef9013.com/elb/sdl/sdl_d33.htm#top">
<area shape="RECT" coords="262,321,347,354" href="http://time.sintef9013.com/elb/sdl/sdl_d13.htm#top">
</map>
<img src="sdl_t01_data/sdl_t03-9.gif" usemap="#sdl_t03-9" align="BOTTOM">
&nbsp;</p>
<p class="avsnitt">
<a name="pgfId=155775">
 </a>
&nbsp;</p>
<p class="avsnitt">
<a name="pgfId=60014">
 </a>
<a name="SignalLib">
 </a>
This <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d10.htm#top" class="Hypertext">
package</a>
</em>
 defines all the <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d13.htm#top" class="Hypertext">
signals</a>
</em>
 being used in the access control system.</p>
<p class="avsnitt">
<a name="pgfId=61118">
 </a>
Defining a package SignalLib makes all the signal type definitions 
become globally defined, and they may be used by more than one system 
(without "copy-paste"). It is of course possible to let additional 
signals be defined locally in order to restrict the contexts in which 
they will be used.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=60104">
 </a>
package</h4>
<p class="avsnitt">
<a name="pgfId=60105">
 </a>
A package is a collection of types, defined by a package diagram. A 
package may in general contain definitions of types, data generators, 
signal lists, remote specifications and synonyms. Definitions within a 
package are made visible to a system definition or other package 
definitions by a package-reference-clause (use clause). </p>
<p class="avsnitt">
<a name="pgfId=60375">
 </a>
The package in <a href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#37399" class="XRef">
<em class="Hyperlink">
Figure 17</em>
</a>
 only contains definitions of signals.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=60048">
 </a>
signal definition</h4>
<p class="avsnitt">
<a name="pgfId=60049">
 </a>
A signal definition defines a set of types of signals. A signal instance
 is a flow of information between processes, and is an instantiation of a
 signal type defined by a signal definition. A signal instance can be 
sent by either the environment or a process.</p>
<p class="avsnitt">
<a name="pgfId=60852">
 </a>
Signals may carry data values. The types of the values are specified as 
parameters of the signal definition. The signal Code defined in <a href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#37399" class="XRef">
<em class="Hyperlink">
Figure 17</em>
</a>
 is defined to carry two integer values.</p>
<p class="avsnitt">
<a name="pgfId=60050">
 </a>
Signals may be defined in system and block diagrams, and these may then 
be used for communication between the blocks of the system or the 
processes of the block. Signals may also be defined in process (type) 
diagrams, but then they can only be used for communication between 
processes of the same set. Often signal definitions are collected in <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d10.htm#top" class="Hypertext">
packages</a>
</em>
.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=60028">
 </a>
signal list</h4>
<p class="avsnitt">
<a name="pgfId=60384">
 </a>
Often the lists of signals associated with channels and signal routes 
are quite comprehensive and diagrams become crowded. The notion of 
signallist helps on this. A signallist is a list of signals which has 
been given a name. Validity, inp and outp are signallists defined in the
 package and used in the system diagram.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=76378">
 </a>
text symbol</h4>
<p class="avsnitt">
<a name="pgfId=76379">
 </a>
Text symbols are used in order to have textual specifications as part of
 diagrams, especially for specification of signal types, data types and 
variables.<img src="sdl_t01_data/sdl_t03-10.gif" align="LEFT">
</p>
<p class="avsnitt">
<a name="pgfId=76380">
 </a>
There is no limit to the number of text symbols that may occur in a 
diagram. Text symbols are not connected to other symbols by flow lines.</p>
<p class="avsnitt">
<a name="pgfId=97552">
 </a>
The text symbol is also used for the graphical representation of a use clause, see <a href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#37399" class="XRef">
<em class="Hyperlink">
Figure 17</em>
</a>
.</p>
<p class="over2">
<a name="pgfId=97559">
 </a>
<a name="35355">
 </a>
Package <a name="Package diagram, AccessPointLib">
 </a>
diagram, <a name="AccessPointLib">
 </a>
AccessPointLib</p>
<p class="avsnitt">
<a name="pgfId=51661">
 </a>
The AccessPointLib package uses the signals defined in the package SignalLib (by the use clause) and defines three <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d07.htm#top" class="Hypertext">
block types</a>
</em>
.</p>
<dl>
<dt class="figur">
<a name="pgfId=226288">
 </a>
Figure 18:	 <a name="17488">
 </a>
Package <a name="top">
 </a>
diagram AccessPointLib</dt>
<dl>
<dt class="figurelink">
<a name="pgfId=226359">
 </a>
<a href="http://time.sintef9013.com/elb/sdl/sdl_f09.htm#top" class="Hypertext">
Open figure</a>
</dt>
</dl>
</dl>
<div>
<map name="sdl_t03-11">
<area shape="RECT" coords="26,118,88,130" href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#AccessPoint">
<area shape="RECT" coords="120,119,224,131" href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#BlockingAccessPoint">
<area shape="RECT" coords="20,49,101,62" href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#SignalLib">
<area shape="RECT" coords="250,116,351,133" href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#LoggingAccessPoint">
<area shape="RECT" coords="177,14,276,25" href="http://time.sintef9013.com/elb/sdl/sdl_d01.htm#top">
<area shape="RECT" coords="92,172,191,184" href="http://time.sintef9013.com/elb/sdl/sdl_d10.htm#top">
</map>
<img src="sdl_t01_data/sdl_t03-11.gif" usemap="#sdl_t03-11">
</div>
<p class="avsnitt">
<a name="pgfId=191121">
 </a>
&nbsp;</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=68865">
 </a>
block type reference</h4>
<p class="avsnitt">
<a name="pgfId=68866">
 </a>
Block types are referenced by means of block type references.<map name="sdl_t03-12">
<area shape="RECT" coords="8,11,70,23" href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#AccessPoint">
</map>
<img src="sdl_t01_data/sdl_t03-12.gif" usemap="#sdl_t03-12" align="LEFT">
 Block types are defined in block type diagrams, and they are referenced by means of <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d34.htm#top" class="Hypertext">
block type references</a>
</em>
. The block type reference indicates in which block or system scope unit
 the block type is defined. The three block type references in <a href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#17488" class="XRef">
<em class="Hyperlink">
Package diagram AccessPointLib</em>
</a>
 indicates that the scope of these are the package and not a specific system.</p>
<p class="avsnitt">
<a name="pgfId=76521">
 </a>
Note that the block type reference (as for block references) is merely a
 graphical shorthand for diagrams. Block type references may be 
substituted by block type diagrams.</p>
<p class="over2">
<a name="pgfId=54737">
 </a>
<a name="33835">
 </a>
Block <a name="Block type diagram, AccessPoint">
 </a>
type diagram, <a name="AccessPoint">
 </a>
AccessPoint</p>
<p class="avsnitt">
<a name="pgfId=77239">
 </a>
The block type AccessPoint defines the properties of a general type of 
access point in the system. The other types of access points (blocking 
and logging access points) are defined a subtypes of this.</p>
<p class="avsnitt">
<a name="pgfId=121195">
 </a>
Each access point shall handle the interaction with the user via a 
panel, communicate with the central unit and control the door. </p>
<dl>
<dt class="figur">
<a name="pgfId=226588">
 </a>
Figure 19:	 <a name="28107">
 </a>
<a name="30636">
 </a>
Block <a name="top">
 </a>
type AccessPoint with virtual Controller process type</dt>
<dl>
<dt class="figurelink">
<a name="pgfId=226797">
 </a>
<a href="http://time.sintef9013.com/elb/sdl/sdl_f04.htm#top" class="Hypertext">
Open figure</a>
</dt>
</dl>
</dl>
<div>
<map name="sdl_t03-13">
<area shape="RECT" coords="125,136,176,149" href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#LSControl">
<area shape="RECT" coords="133,179,162,192" href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#Panel">
<area shape="RECT" coords="177,325,276,337" href="http://time.sintef9013.com/elb/sdl/sdl_d35.htm#top">
<area shape="RECT" coords="14,307,49,318" href="http://time.sintef9013.com/elb/sdl/sdl_d14.htm#top">
<area shape="RECT" coords="63,307,113,318" href="http://time.sintef9013.com/elb/sdl/sdl_d33.htm#top">
<area shape="RECT" coords="7,120,49,146" href="http://time.sintef9013.com/elb/sdl/sdl_d11.htm#top">
<area shape="RECT" coords="262,14,361,25" href="http://time.sintef9013.com/elb/sdl/sdl_d15.htm#top">
<area shape="RECT" coords="360,113,418,142" href="http://time.sintef9013.com/elb/sdl/sdl_d18.htm#top">
<area shape="RECT" coords="120,314,191,325" href="http://time.sintef9013.com/elb/sdl/sdl_d35.htm#top">
<area shape="RECT" coords="297,314,354,325" href="http://time.sintef9013.com/elb/sdl/sdl_d14.htm#top">
<area shape="RECT" coords="361,70,418,103" href="http://time.sintef9013.com/elb/sdl/sdl_d13.htm#top">
</map>
<img src="sdl_t01_data/sdl_t03-13.gif" usemap="#sdl_t03-13">
</div>
<p class="avsnitt">
<a name="pgfId=191787">
 </a>
&nbsp;</p>
<p class="avsnitt">
<a name="pgfId=119874">
 </a>
This <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d35.htm#top" class="Hypertext">
block type diagram</a>
</em>
 defines the <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d07.htm#top" class="Hypertext">
block type</a>
</em>
 with name AccessPoint in the AccessPointLib package. Each block instance of this type will consist of three <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d08.htm#top" class="Hypertext">
process sets</a>
</em>
 (Panel, Door, apc). The first two are defined in corresponding process diagrams (they are really just <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d36.htm#top" class="Hypertext">
process references</a>
</em>
), while apc is a set instances of <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d19.htm#top" class="Hypertext">
process type</a>
</em>
 Controller. The process type Controller is defined as a <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d18.htm#top" class="Hypertext">
virtual process type</a>
</em>
, with the keyword VIRTUAL, so that specialisations of AccessPoint may replace that definition with their own definition.</p>
<p class="avsnitt">
<a name="pgfId=62395">
 </a>
The Panel takes of the physical panel, the Door process takes care of 
controlling the physical door, while the Controller process handles the 
communication with the CentralUnit in order to validate users of the 
access point.</p>
<p class="avsnitt">
<a name="pgfId=62061">
 </a>
Note the identifiers e and C which in the system diagram occurs inside the block set ap. These identifiers designate <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d14.htm#top" class="Hypertext">
gates</a>
</em>
. Gates are used to indicate which channels of the block type are 
supposed to connect to which channel connecting an instance of the type.
 The gate names are defined by the type and visible wherever the type 
name is visible. Note also that the gate symbols have arrows at the ends
 and that signal lists are associated with the arrows. The signallists 
are constraints on the gates and will ensure that the instances of the 
block type are connected properly to their surroundings.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=62948">
 </a>
block type</h4>
<p class="avsnitt">
<a name="pgfId=62949">
 </a>
A block type defines the common properties for a category of blocks. All
 block of the same type will have the same properties, as specified in 
the block type diagram.</p>
<p class="avsnitt">
<a name="pgfId=62951">
 </a>
Block types may contain a connectivity graph of block instances 
connected by channels. This makes up a structure of nested blocks. At 
the leaves of this structure there are blocks which contain processes. 
Blocks cannot contain both blocks and processes at the same level.</p>
<p class="avsnitt">
<a name="pgfId=62952">
 </a>
In addition to containing structures of blocks or structures of 
processes, block types may contain other type definitions. This makes up
 the scoping hierarchy of SDL. Names in enclosing type definitions are 
the only names visible. </p>
<p class="avsnitt">
<a name="pgfId=62953">
 </a>
Block types may contain data type definitions, but no variable 
declarations. This follows from the fact that processes in SDL do .fmnot
 share data other than signal queues. They share a signal queue in the 
way that one process appends (output) signals to the queue (the input 
port), while the other process consumes (input) signals from the same 
queue. Appending and consuming signals are atomic, non-interruptible 
operations. The input port is the basic synchronisation mechanism of 
SDL.</p>
<p class="avsnitt">
<a name="pgfId=62954">
 </a>
Block types may contain process types, service types and procedures as well as block types and data types. </p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=68939">
 </a>
block (type) heading</h4>
<p class="avsnitt">
<a name="pgfId=68941">
 </a>
The heading of block type diagrams defines the name of the block type, 
possible formal context parameters, whether the block type is virtual or
 not and if it inherits from another block type. 	The block type in <a href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#28107" class="XRef">
<em class="Hyperlink">
Figure 19</em>
</a>
 does not have any context parameters and it is not virtual.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=61375">
 </a>
process (reference) </h4>
<p class="avsnitt">
<a name="pgfId=61376">
 </a>
A process reference specifies that there is a process set in the 
enclosing block and that the properties of this process are defined in a
 separate (referenced) <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d57.htm#top" class="Hypertext">
process diagram</a>
</em>
 outside this diagram.<map name="sdl_t03-14">
<area shape="RECT" coords="19,10,48,23" href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#Panel">
</map>
<img src="sdl_t01_data/sdl_t03-14.gif" usemap="#sdl_t03-14" align="LEFT">
 A process reference is a shorthand for having the referenced process diagram at this place in the surrounding diagram.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=61508">
 </a>
process set</h4>
<p class="avsnitt">
<a name="pgfId=63139">
 </a>
A process set defines a set of processes according to a <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d19.htm#top" class="Hypertext">
process type</a>
</em>
<a name="marker=61510">
 </a>
.<img src="sdl_t01_data/sdl_t03-15.gif" align="LEFT">
</p>
<p class="avsnitt">
<a name="pgfId=61512">
 </a>
Just like we have the distinction between block reference, block type 
and block set according to type, we have the distinction between process
 reference, process type and process set according to a type. Our 
recommendation is that process sets should be described with reference 
to a process type.</p>
<p class="avsnitt">
<a name="pgfId=66636">
 </a>
While Panel above is a process reference, and thereby a process set 
without any associated type, apc is a process set according to the 
process type Controller and therefore not a process reference.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=61521">
 </a>
number of instances</h4>
<p class="avsnitt">
<a name="pgfId=83300">
 </a>
In general <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d08.htm#top" class="Hypertext">
process sets</a>
</em>
 may have specified the number of instances in the set.<img src="sdl_t01_data/sdl_t03-16.gif" align="LEFT">
</p>
<p class="avsnitt">
<a name="pgfId=61529">
 </a>
The numbers in parentheses after the process set name specifies the 
number of instances in the process set. As defined in above, there are 
initially no processes, and there is no limit on the number of instances
 that may be created.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=61394">
 </a>
<em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_z36.htm#top" class="Hypertext">
</a>
</em>
signal route</h4>
<p class="avsnitt">
<a name="pgfId=61395">
 </a>
A <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d17.htm#top" class="Hypertext">
signal route</a>
</em>
 represents a communication path between process sets and between 
process sets and the environment of the enclosing block/block type.<img src="sdl_t01_data/sdl_t03-17.gif" align="LEFT">
</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=61454">
 </a>
process type</h4>
<p class="avsnitt">
<a name="pgfId=61456">
 </a>
A process type defines the common properties of a category of <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d09.htm#top" class="Hypertext">
process</a>
</em>
 instances. A process type is defined by a <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d39.htm#top" class="Hypertext">
process type diagram</a>
</em>
.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=61414">
 </a>
virtual process type</h4>
<p class="avsnitt">
<a name="pgfId=61416">
 </a>
A virtual process type is a <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d19.htm#top" class="Hypertext">
process type</a>
</em>
 that can be redefined in a subtype of the enclosing block type.<map name="sdl_t03-18">
<area shape="RECT" coords="18,18,69,31" href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#LSControl">
</map>
<img src="sdl_t01_data/sdl_t03-18.gif" usemap="#sdl_t03-18" align="LEFT">
</p>
<p class="avsnitt">
<a name="pgfId=61419">
 </a>
The virtuality is specified in the <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d16.htm#top" class="Hypertext">
process type heading</a>
</em>
 or by &lt;<em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d28.htm#top" class="Hypertext">
virtuality</a>
</em>
&gt; in the corresponding process type reference symbol, as is done here for the process type Controller.</p>
<p class="avsnitt">
<a name="pgfId=61421">
 </a>
A redefinition of the <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d19.htm#top" class="Hypertext">
process type</a>
</em>
 must be a subtype of the type identified in the virtuality constraint. As specified here the process type reference symbol has <em class="Emphasis">
no</em>
 explicit <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d29.htm#top" class="Hypertext">
virtuality constraint</a>
</em>
, which means that any redefinition will <em class="Emphasis">
extend</em>
 the given definition of Controller (the Controller is its own constraint).</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=63305">
 </a>
<a href="http://time.sintef9013.com/elb/sdl/sdl_z17.htm#top" class="Hypertext">
gate</a>
</h4>
<p class="avsnitt">
<a name="pgfId=63306">
 </a>
A <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d14.htm#top" class="Hypertext">
gate</a>
</em>
 is a potential connection point for channels/signal routes when 
connecting sets of blocks/processes/services. The same symbol is used in
 all cases. <img src="sdl_t01_data/sdl_t03-19.gif" align="LEFT">
</p>
<p class="avsnitt">
<a name="pgfId=63155">
 </a>
Gates are defined in block/process/service types and used when 
connecting sets or instances of these with channels/signal routes.</p>
<p class="avsnitt">
<a name="pgfId=63156">
 </a>
The signal list associated with the endpoints represents constraints (on incoming/outgoing signals) the gate.</p>
<p class="over2">
<a name="pgfId=7969">
 </a>
<a name="12571">
 </a>
Block <a name="Block type diagram, BlockingAccessPoint">
 </a>
type diagram, <a name="BlockingAccessPoint">
 </a>
BlockingAccessPoint</p>
<dl>
<dt class="figur">
<a name="pgfId=224158">
 </a>
Figure 20:	  <a name="10640">
 </a>
Block <a name="top">
 </a>
type BlockingAccessPoint as a subtype of AccessPoint</dt>
<dl>
<dt class="figurelink">
<a name="pgfId=224221">
 </a>
<a href="http://time.sintef9013.com/elb/sdl/sdl_f06.htm#top" class="Hypertext">
Open figure</a>
</dt>
</dl>
</dl>
<div>
<map name="sdl_t03-20">
<area shape="RECT" coords="112,89,170,99" href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#bls.LSControl">
<area shape="RECT" coords="35,120,99,148" href="http://time.sintef9013.com/elb/sdl/sdl_d40.htm#top">
<area shape="RECT" coords="248,127,311,155" href="http://time.sintef9013.com/elb/sdl/sdl_d30.htm#top">
</map>
<img src="sdl_t01_data/sdl_t03-20.gif" usemap="#sdl_t03-20">
</div>
<p class="avsnitt">
<a name="pgfId=157267">
 </a>
&nbsp;</p>
<p class="avsnitt">
<a name="pgfId=8284">
 </a>
This block type defines a block type with name BlockingAccessPoint as a 
subtype of block type AccessPoint. It represents access points that may 
be blocked by some operator.</p>
<p class="avsnitt">
<a name="pgfId=8879">
 </a>
BlockingAccessPoints are quite similar to the plain AccessPoints.The 
only difference is that the BlockingAccessPoints shall be able to react 
to signals from the CentralUnit that plain AccessPoints will not 
recognise. BlockingAccessPoint will have a Door (which should not have a
 new definition), a Panel (which could have a new definition, but need 
not have a new definition) and a control process Controller which should
 be able to do the extended controlling.</p>
<p class="avsnitt">
<a name="pgfId=8877">
 </a>
A BlockingAccessPoint is a specialised AccessPoint where Controller is 
extended. This is expressed by the INHERITS clause of the block type 
heading.</p>
<p class="avsnitt">
<a name="pgfId=8885">
 </a>
The block type diagram specifies that BlockingAccessPoint inherits 
everything from AccessPoint, but it adds a redefinition of Controller 
and it adds two signal types on the inherited gate C: Enable and 
Disable. The fact the the gate is inherited is indicated by it being 
dashed.</p>
<p class="avsnitt">
<a name="pgfId=63389">
 </a>
In general, entities defined in supertype, inherited in subtypes and for
 which some additional properties have to be specified in the subtype, 
are called <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_z30.htm#top" class="Hypertext">
existing entities</a>
</em>
, and in the graphical syntax they are <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d30.htm#top" class="Hypertext">
dashed entities</a>
</em>
.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=63991">
 </a>
redefined process type</h4>
<p class="avsnitt">
<a name="pgfId=64017">
 </a>
A redefined <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d19.htm#top" class="Hypertext">
process type</a>
</em>
 is a redefinition of the corresponding <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d18.htm#top" class="Hypertext">
virtual process type</a>
</em>
 in the super block type, and it is virtual, so that it can be redefined in further subtypes of this <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d07.htm#top" class="Hypertext">
block type</a>
</em>
.<map name="sdl_t03-21">
<area shape="RECT" coords="18,19,76,29" href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#bls.LSControl">
</map>
<img src="sdl_t01_data/sdl_t03-21.gif" usemap="#sdl_t03-21" align="LEFT">
</p>
<p class="avsnitt">
<a name="pgfId=63994">
 </a>
A redefinition of the process type must be a subtype of the type 
identified in the virtuality constraint. In this case the constraint is 
not explicitly specified; this implies that the definition of the 
virtual process type is its own constraint: the redefinition thereby 
defines an extension (a subtype) of the virtual process type.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=63985">
 </a>
dashed entity</h4>
<p class="avsnitt">
<a name="pgfId=63428">
 </a>
A <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d30.htm#top" class="Hypertext">
dashed entity</a>
</em>
 is the graphical way of representing an entity that is inherited from a
 supertype and which needs to be used in the definition of the subtype. 
There are dashed block sets, process sets, services and gates.<img src="sdl_t01_data/sdl_t03-22.gif" align="LEFT">
</p>
<p class="avsnitt">
<a name="pgfId=63429">
 </a>
The Z.100 terminology is <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_z30.htm#top" class="Hypertext">
existing entity</a>
</em>
.</p>
<p class="avsnitt">
<a name="pgfId=63430">
 </a>
An existing block set/block may be connected by channel, and these will 
then be there in addition to those specified in the super type.</p>
<p class="avsnitt">
<a name="pgfId=63431">
 </a>
An existing process set/service may be connected by signal routes, and 
these will then be there in addition to those specified in the super 
type.</p>
<p class="avsnitt">
<a name="pgfId=63432">
 </a>
An existing gate can have constraints in terms of signals on the 
endpoints of the gate specified, and these are then added to the 
inherited gate and will then apply in addition to those of the inherited
 gate.</p>
<p class="avsnitt">
<a name="pgfId=95415">
 </a>
In the textual version of a specification, inherited entities are simply identified by name.</p>
<p class="over2">
<a name="pgfId=95424">
 </a>
<a name="20653">
 </a>
Block <a name="Block type diagram, LoggingAccessPoint">
 </a>
type diagram, <a name="LoggingAccessPoint">
 </a>
LoggingAccessPoint</p>
<dl>
<dt class="figur">
<a name="pgfId=226806">
 </a>
Figure 21:	 <a name="18318">
 </a>
Logging<a name="top">
 </a>
AccessPoint as a subtype of AccessPoint</dt>
<dl>
<dt class="figurelink">
<a name="pgfId=226925">
 </a>
<a href="http://time.sintef9013.com/elb/sdl/sdl_f07.htm#top" class="Hypertext">
Open figure</a>
</dt>
</dl>
</dl>
<div>
<map name="sdl_t03-23">
<area shape="RECT" coords="76,100,127,109" href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#lls.LSControl">
<area shape="RECT" coords="293,162,333,205" href="http://time.sintef9013.com/elb/sdl/sdl_d30.htm#top">
<area shape="RECT" coords="297,70,347,113" href="http://time.sintef9013.com/elb/sdl/sdl_d38.htm#top">
<area shape="RECT" coords="179,7,283,21" href="http://time.sintef9013.com/elb/sdl/sdl_d35.htm#top">
</map>
<img src="sdl_t01_data/sdl_t03-23.gif" usemap="#sdl_t03-23">
</div>
<p class="avsnitt">
<a name="pgfId=157284">
 </a>
&nbsp;</p>
<p class="avsnitt">
<a name="pgfId=8295">
 </a>
This block type defines a block type with name LoggingAccessPoint as a subtype of block type AccessPoint, <em class="Emphasis">
adding</em>
 the process LogDevice.</p>
<p class="avsnitt">
<a name="pgfId=8889">
 </a>
With LoggingAccessPoint it is not sufficient to only modify the 
Controller, since there is an addition to the block, namely the 
LogDevice. The LogDevice must be connected to the Controller along a 
signalroute (which is added compared with the supertype AccessPoint). 
lsc has been defined in the AccessPoint definition and is dashed here.</p>
<p class="avsnitt">
<a name="pgfId=8890">
 </a>
We notice the keyword FINALIZED in the process type reference. This has a slightly different meaning than REDEFINED.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=64044">
 </a>
finalised process type</h4>
<p class="avsnitt">
<a name="pgfId=64085">
 </a>
A finalised process type is a redefinition of the corresponding <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d18.htm#top" class="Hypertext">
virtual process type</a>
</em>
 in the super block type, and it is not virtual, so that it can not be redefined in further subtypes of this block type.<map name="sdl_t03-24">
<area shape="RECT" coords="15,19,66,28" href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#lls.LSControl">
</map>
<img src="sdl_t01_data/sdl_t03-24.gif" usemap="#sdl_t03-24" align="LEFT">
</p>
<p class="avsnitt">
<a name="pgfId=64047">
 </a>
A final redefinition of the process type must be a subtype of the type identified in the <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_z18.htm#top" class="Hypertext">
virtuality constraint</a>
</em>
.</p>
<p class="avsnitt">
<a name="pgfId=64040">
 </a>
A redefined type can be redefined again in yet another specialisation. A
 finalised type cannot be redefined. There is a subtle point to making 
this distinction. Virtual and redefined types are very flexible, but 
analysis becomes more uncertain since some components may not be 
entirely known. Finalised types are not flexible any more, they are 
completely known and, therefore, analysis can be certain.</p>
<p class="avsnitt">
<a name="pgfId=8891">
 </a>
The new signalroute LD indicates that it is not be possible to derive 
the finalised Controller by only adding a number of new transitions to 
the basic Controller. In order to get new transitions, we need either 
new input signals or new states. The Controller of LoggingAccessPoint 
has neither new signals, which can be seen from the channels to the <em class="Emphasis">
lap</em>
 set of logging access points, nor new states. In fact the LogDevice 
should be invoked for most transitions since the requirement was to 
trace the transactions. Then our need is to modify (redefine) some of 
the existing transitions.</p>
<p class="over2">
<a name="pgfId=192400">
 </a>
<a name="22263">
 </a>
Process <a name="Process type diagram, Controller">
 </a>
type diagram, <a name="LSControl">
 </a>
Controller</p>
<dl>
<dt class="figur">
<a name="pgfId=224362">
 </a>
Figure 22:	 <a name="41395">
 </a>
Virtual <a name="top">
 </a>
process type Controller</dt>
<dl>
<dt class="figurelink">
<a name="pgfId=224642">
 </a>
<a href="http://time.sintef9013.com/elb/sdl/sdl_f12.htm#top" class="Hypertext">
Open figure</a>
</dt>
</dl>
</dl>
<div>
<map name="sdl_t03-25">
<area shape="RECT" coords="191,0,311,14" href="http://time.sintef9013.com/elb/sdl/sdl_d39.htm#top">
<area shape="RECT" coords="141,85,191,99" href="http://time.sintef9013.com/elb/sdl/sdl_d04.htm#top">
<area shape="RECT" coords="106,113,155,127" href="http://time.sintef9013.com/elb/sdl/sdl_d41.htm#top">
<area shape="RECT" coords="113,148,162,162" href="http://time.sintef9013.com/elb/sdl/sdl_d13.htm#top">
<area shape="RECT" coords="318,283,368,297" href="http://time.sintef9013.com/elb/sdl/sdl_d44.htm#top">
<area shape="RECT" coords="99,318,148,333" href="http://time.sintef9013.com/elb/sdl/sdl_d13.htm#top">
<area shape="RECT" coords="106,219,155,233" href="http://time.sintef9013.com/elb/sdl/sdl_d43.htm#top">
<area shape="RECT" coords="248,276,297,304" href="http://time.sintef9013.com/elb/sdl/sdl_d46.htm#top">
<area shape="RECT" coords="333,85,382,113" href="http://time.sintef9013.com/elb/sdl/sdl_d40.htm#top">
</map>
<img src="sdl_t01_data/sdl_t03-25.gif" usemap="#sdl_t03-25">
</div>
<p class="avsnitt">
<a name="pgfId=192401">
 </a>
&nbsp;</p>
<p class="avsnitt">
<a name="pgfId=130027">
 </a>
&nbsp;</p>
<p class="avsnitt">
<a name="pgfId=8748">
 </a>
This process type heading defines the process type Controller as a 
virtual process type. This means that the process type can be redefined 
in a subtype of the enclosing block type.</p>
<p class="avsnitt">
<a name="pgfId=8897">
 </a>
Plain AccessPoints have their own (default) definitions of Controller.</p>
<p class="avsnitt">
<a name="pgfId=8910">
 </a>
A Controller process will start executing the start transition. In this 
case the start transition is empty and simply leads to the Idle state. 
The process will remain in the Idle state until it receives an input 
signal. It expects to receive a Code signal containing information about
 the card id and personal identity number from the Panel. It may, 
however, be prepared to receive other signals as well. The Idle state is
 followed by one input symbol which describes the consumption of the 
signal Code. If the process is in the Idle state and signals other than 
Code are received, they will be discarded.</p>
<p class="avsnitt">
<a name="pgfId=8899">
 </a>
We have defined three process gates P, D and U with associated process 
gate constraints. We note that the enclosing AccessPoint definition uses
 these gates in connection with the instance lsc of Controller.</p>
<p class="avsnitt">
<a name="pgfId=8900">
 </a>
Within the process type diagrams, the gates appear as identifiers in the VIA-clause of the output symbols.</p>
<p class="avsnitt">
<a name="pgfId=63464">
 </a>
When we want to analyse the type enclosing the virtual type (here, block
 type AccessPoint) we wish to know something about the instances of the 
virtual types even though we know they may be redefined in subtypes. At 
least we must know the static interface, i.e. the gates. Very often we 
would like to know more about the type and, therefore, the header of a 
virtual type may include a <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d29.htm#top" class="Hypertext">
virtuality constraint</a>
</em>
. The virtuality constraint is of the form "atleast type-identifier". 
All "matches" (redefinitions and finalisations) of the virtual must be 
specialisations of the type referred to by the type-identifier of the 
constraint.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=97701">
 </a>
process type diagram </h4>
<p class="avsnitt">
<a name="pgfId=97703">
 </a>
A <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_z39.htm#top" class="Hypertext">
process type diagram</a>
</em>
 defines the properties of a process type. A process type defines the common properties of a category of <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d09.htm#top" class="Hypertext">
process</a>
</em>
 instances. A process type is defined by a <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_z39.htm#top" class="Hypertext">
process type diagram</a>
</em>
.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=69554">
 </a>
process type heading</h4>
<p class="avsnitt">
<a name="pgfId=69556">
 </a>
The <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_z16.htm#top" class="Hypertext">
heading</a>
</em>
 of process type diagrams defines the name of the process type, its 
virtuality (and constraint), its formal context parameters and if it 
inherits from another process type. The heading in <a href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#41395" class="XRef">
<em class="Hyperlink">
Figure 22</em>
</a>
 defines a virtual process types without any context parameters and without any parameters.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=81034">
 </a>
variables in processes</h4>
<p class="avsnitt">
<a name="pgfId=81035">
 </a>
<em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_z56.htm#top" class="Hypertext">
Variables</a>
</em>
 can be defined in processes, services and procedures. They are defined in text symbols.</p>
<p class="avsnitt">
<a name="pgfId=81223">
 </a>
SDL supports predefined types including Character, Boolean, Integer, 
Natural, Real and PId (Process Instance Identifier). The variables cid 
and PIN in <a href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#41395" class="XRef">
<em class="Hyperlink">
Figure 22</em>
</a>
 are defined to be of type Integer, while the variable cur_panel is of type PId, which means that it denotes a process instance.</p>
<p class="avsnitt">
<a name="pgfId=81237">
 </a>
For a short introduction to the definition of user-defined types see <a href="http://time.sintef9013.com/billingstad/elb/sdl/sdl_t01.htm#28557" class="XRef">
 <em class="Hyperlink">
"Specifying properties of variables: data types"</em>
</a>
. </p>
<p class="avsnitt">
<a name="pgfId=81036">
 </a>
Variables of process are created as part of the creation of the process instance.</p>
<p class="avsnitt">
<a name="pgfId=81039">
 </a>
Variables will get default initial values if nothing else is specified.</p>
<p class="avsnitt">
<a name="pgfId=64210">
 </a>
The following elements of SDL are used in the definition of Controller behaviour.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=64238">
 </a>
<a name="38816">
 </a>
procedure reference</h4>
<p class="avsnitt">
<a name="pgfId=64239">
 </a>
A <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_z40.htm#top" class="Hypertext">
procedure reference</a>
</em>
 specifies that there is a procedure in the enclosing entity and that 
the properties of this procedure are defined in a separate (referenced) 
procedure diagram outside this diagram. <img src="sdl_t01_data/sdl_t03-26.gif" align="LEFT">
</p>
<p class="avsnitt">
<a name="pgfId=64705">
 </a>
In the example here, unlockDoor is a procedure defined locally to 
Controller, and it is referenced by the symbol containing "unlockDoor" -
 that is there is a procedure diagram defining the properties of 
unlockDoor.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=64571">
 </a>
start</h4>
<p class="avsnitt">
<a name="pgfId=64572">
 </a>
There is only one <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_z04.htm#top" class="Hypertext">
start symbol</a>
</em>
 for a process. The transition from the start takes place when the 
process is generated. A process may be generated either at system 
start-up or as a result of a create request from another process.<img src="sdl_t01_data/sdl_t03-27.gif" align="LEFT">
</p>
<p class="avsnitt">
<a name="pgfId=64706">
 </a>
The start transition in the Controller process is empty, that is there 
are no actions, so the process just enters the Idle state upon start.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=64473">
 </a>
transition</h4>
<p class="avsnitt">
<a name="pgfId=64475">
 </a>
A <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_z45.htm#top" class="Hypertext">
transition</a>
</em>
 performs a sequence of actions. During a transition, the data of a process may be manipulated and signals may be output.</p>
<p class="avsnitt">
<a name="pgfId=97688">
 </a>
Actions may be <map name="sdl_t03-28">
</map>
<img src="sdl_t01_data/sdl_t03-28.gif" usemap="#sdl_t03-28" align="RIGHT">
</p>
<ul>
<li class="liste.">
<a name="pgfId=97690">
 </a>
<em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d43.htm#top" class="Hypertext">
task</a>
</em>
,</li>
<li class="liste.">
<a name="pgfId=97692">
 </a>
<em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d44.htm#top" class="Hypertext">
output</a>
</em>
,</li>
<li class="liste.">
<a name="pgfId=64481">
 </a>
<em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d61.htm#top" class="Hypertext">
set</a>
</em>
,</li>
<li class="liste.">
<a name="pgfId=64482">
 </a>
<em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d61.htm#top" class="Hypertext">
reset</a>
</em>
,</li>
<li class="liste.">
<a name="pgfId=64483">
 </a>
export</li>
<li class="liste.">
<a name="pgfId=64484">
 </a>
<em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d60.htm#top" class="Hypertext">
create request</a>
</em>
,</li>
<li class="liste.">
<a name="pgfId=64486">
 </a>
<em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d46.htm#top" class="Hypertext">
procedure call</a>
</em>
, or</li>
<li class="liste.">
<a name="pgfId=64487">
 </a>
<em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d59.htm#top" class="Hypertext">
remote procedure call</a>
</em>
.</li>
</ul>
<p class="avsnitt">
<a name="pgfId=64488">
 </a>
The transition will end with the process entering a</p>
<ul>
<p class="liste-">
<a name="pgfId=64489">
 </a>
next state,</p>
<p class="liste-">
<a name="pgfId=64490">
 </a>
with a stop,</p>
<p class="liste-">
<a name="pgfId=64491">
 </a>
with a return or</p>
<p class="liste-">
<a name="pgfId=64492">
 </a>
with the transfer of control to another transition.</p>
</ul>
<p class="avsnitt">
<a name="pgfId=64494">
 </a>
The controller process has three <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_z45.htm#top" class="Hypertext">
transitions</a>
</em>
: one starting in the state Idle and two in the state Validation. They 
are all input transitions, that is they are triggered by the consumption
 of a signal from the input queue of the process.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=64282">
 </a>
state</h4>
<p class="avsnitt">
<a name="pgfId=64815">
 </a>
A <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_z41.htm#top" class="Hypertext">
state</a>
</em>
 represents a particular condition in which a process may consume a 
signal resulting in a transition. If the state has neither spontaneous 
transitions nor continuous signals, and there are no signal instances in
 the input port, otherwise than those mentioned in a save, then the 
process waits in the state until a signal instance is received.<img src="sdl_t01_data/sdl_t03-29.gif" align="LEFT">
</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=64818">
 </a>
input</h4>
<p class="avsnitt">
<a name="pgfId=64316">
 </a>
An <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_z42.htm#top" class="Hypertext">
input</a>
</em>
 allows the consumption of the specified input signal instance (here of 
type Code).The variables associated with the input (here cid and PIN) 
are assigned the values conveyed by the consumed signal.<img src="sdl_t01_data/sdl_t03-30.gif" align="LEFT">
</p>
<p class="avsnitt">
<a name="pgfId=64317">
 </a>
The values will be assigned to the variables from left to right. If 
there is no variable associated with the input for a sort specified in 
the signal, the value of this sort is discarded. If there is no value 
associated with a sort specified in the signal, the corresponding 
variable becomes "undefined".</p>
<p class="avsnitt">
<a name="pgfId=64318">
 </a>
The sender expression of the consuming process is given the PId value of
 the originating process, carried by the signal instance.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=71883">
 </a>
virtual (input) transition</h4>
<p class="avsnitt">
<a name="pgfId=71884">
 </a>
A <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_z49.htm#top" class="Hypertext">
virtual input transition</a>
</em>
 specifies that subtypes of type with this transition may redefine it, 
that is it must input the signal in the state, but the following 
transition may be redefined<img src="sdl_t01_data/sdl_t03-31.gif" align="LEFT">
</p>
<p class="avsnitt">
<a name="pgfId=71951">
 </a>
A virtual input transition is a special case of a general notion of virtual transition:</p>
<ul>
<li class="liste.">
<a name="pgfId=71987">
 </a>
virtual priority input,</li>
<li class="liste.">
<a name="pgfId=71988">
 </a>
virtual start,</li>
<li class="liste.">
<a name="pgfId=71990">
 </a>
virtual spontaneous transition.</li>
</ul>
<p class="avsnitt">
<a name="pgfId=71995">
 </a>
In addition a save may be specified as a virtual save.</p>
<p class="avsnitt">
<a name="pgfId=71885">
 </a>
Redefinition of virtual transitions/saves corresponds closely to redefinition of virtual types:</p>
<ul>
<li class="liste.">
<a name="pgfId=71886">
 </a>
A virtual start transition can be redefined to a new start transition.</li>
<li class="liste.">
<a name="pgfId=71887">
 </a>
A virtual priority input or input transition can be redefined to a new priority input or input transition or to a save. </li>
<li class="liste.">
<a name="pgfId=71888">
 </a>
A virtual save can be redefined to a priority input, an input transition or a save.</li>
<li class="liste.">
<a name="pgfId=71889">
 </a>
A virtual spontaneous transition can be redefined to a new spontaneous transition. </li>
</ul>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=64337">
 </a>
task</h4>
<p class="avsnitt">
<a name="pgfId=64338">
 </a>
A <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_z43.htm#top" class="Hypertext">
task</a>
</em>
 may contain a sequence of assignment statements or behaviour specified in informal text. <img src="sdl_t01_data/sdl_t03-32.gif" align="LEFT">
</p>
<p class="avsnitt">
<a name="pgfId=65350">
 </a>
The example here is an assignment of (the predefined) SENDER, that is 
the sender of the signal triggering the transition of which this task is
 a part, to a PId variable cur_panel.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=83330">
 </a>
timer</h4>
<p class="avsnitt">
<a name="pgfId=83557">
 </a>
In addition to assignments, task may specify the setting and resetting of <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_z61.htm#top" class="Hypertext">
timers</a>
</em>
. Timers are just like alarm clocks. The process waiting for a timer is 
passively waiting since the process needs not sample them. Timers will 
issue time-out signals when their time is reached.</p>
<p class="avsnitt">
<a name="pgfId=83365">
 </a>
A timer is declared similarly to a variable. </p>
<div>
<img src="sdl_t01_data/sdl_t03-33.gif">
</div>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=83366">
 </a>
set timer</h4>
<p class="avsnitt">
<a name="pgfId=83577">
 </a>
Timers are set and reset in tasks. When a timer has not been set, it is inactive. When it is set, it becomes active. <img src="sdl_t01_data/sdl_t03-34.gif" align="LEFT">
</p>
<p class="avsnitt">
<a name="pgfId=83619">
 </a>
A timer is set with a time value. time is a special data type and is 
mainly used in connection with timers. The expression "now+10" is a time
 value and it adds the time expression now and the duration 10 
(here:seconds). now is an operator of the time data type and it returns 
the current real time. Duration is another special data type and it is 
also mainly used in connection with timers. You may add or subtract 
duration to time and get time. You may divide or multiply duration by a 
real and get duration. You may subtract a time value from another time 
value and get duration.</p>
<p class="avsnitt">
<a name="pgfId=83620">
 </a>
The timer signal can be input in the same way as ordinary signals:</p>
<div>
<img src="sdl_t01_data/sdl_t03-35.gif">
</div>
<p class="avsnitt">
<a name="pgfId=83375">
 </a>
The semantics of timers is this: a time value is set in a timer and it 
becomes active. When the time is reached, a signal with the same name as
 the timer itself will be sent to the process itself. Then the timer 
becomes inactive.</p>
<p class="avsnitt">
<a name="pgfId=83387">
 </a>
A timer may be reset and it then becomes inactive and no signal will be 
issued. (If an inactive timer is reset, then it remains inactive.) A 
reset will also remove a timer signal instance already in the input 
port. This happens when the timer has expired, but the time-out signal 
has not been consumed.<img src="sdl_t01_data/sdl_t03-36.gif" align="LEFT">
</p>
<p class="avsnitt">
<a name="pgfId=83388">
 </a>
If an active Timer is set, the time value associated with the timer 
receives a new value. The timer is still active. If a timer is set to a 
time which is already passed, the timer will immediately issue the 
time-out signal.</p>
<p class="avsnitt">
<a name="pgfId=83390">
 </a>
Timer signals may contain data as other signals may contain data. 
Different parameter values in set means generation of several timer 
instances. reset must match these parameter values to eliminate the 
correct timer instance.</p>
<p class="avsnitt">
<a name="pgfId=83661">
 </a>
For more details, see <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_z61.htm#top" class="Hypertext">
timers</a>
</em>
.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=64352">
 </a>
output</h4>
<p class="avsnitt">
<a name="pgfId=65606">
 </a>
An <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_z44.htm#top" class="Hypertext">
output</a>
</em>
 generates a signal of the specified signal type (here Code), containing
 the specified actual parameters (here cid and PIN), and send this 
signal instance to the specified destination.<img src="sdl_t01_data/sdl_t03-37.gif" align="LEFT">
 </p>
<p class="avsnitt">
<a name="pgfId=64354">
 </a>
The destination of a signal can be specified in various ways. The output
 symbol may in addition to the signal name (and actual parameters) 
contain a to-clause and/or a via-clause.</p>
<p class="avsnitt">
<a name="pgfId=77778">
 </a>
When the to- and via-clauses are omitted, there should be a unique 
destination for the signal based on the signal identifier. If there is a
 set of possible destinations, one of the destinations will be chosen 
non-deterministically. In our case the path and destination follow 
implicitly from the signalroutes and channels in the block diagrams.</p>
<p class="avsnitt">
<a name="pgfId=77779">
 </a>
When the to-clause is explicit, it specifies a process uniquely either 
by its (visible) name or by a "pointer" value. This "pointer" value in 
SDL is known as "PId" (Process Identifier). When a process is identified
 by its name in the to-clause, this means that it has to be within the 
same block since process names outside the block cannot be visible.</p>
<p class="avsnitt">
<a name="pgfId=77780">
 </a>
In order to specify the path the signal should follow, it is possible to
 append to the output statement a via-clause which lists the path of 
signalroutes and channels which the signal will be sent through. The 
VIA-clause may also specify a gate. Furthermore, the via-clause may be 
extended to "via all" and then if there is more than one channel 
instance in the path a signal instance will be generated for each 
channel instance. This happens for example when we have block sets. This
 is how we can describe a multicast message.</p>
<div>
<map name="sdl_t03-38">
</map>
<img src="sdl_t01_data/sdl_t03-38.gif" usemap="#sdl_t03-38">
</div>
<p class="avsnitt">
<a name="pgfId=77768">
 </a>
&nbsp;</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=71636">
 </a>
procedure call</h4>
<p class="avsnitt">
<a name="pgfId=65742">
 </a>
A procedure call transfers the interpretation to the procedure 
definition referenced in the call, and that procedure graph is 
interpreted.<img src="sdl_t01_data/sdl_t03-39.gif" align="LEFT">
 </p>
<p class="avsnitt">
<a name="pgfId=65743">
 </a>
The interpretation of the transition containing the procedure call 
continues when the interpretation of the called procedure is finished.</p>
<p class="avsnitt">
<a name="pgfId=77968">
 </a>
Note that a procedure call symbol has one and only one entrance and one 
and only one exit. As specified here, the procedure has no parameters.</p>
<p class="over2">
<a name="pgfId=193015">
 </a>
<a name="34547">
 </a>
Process <a name="redefined Controller">
 </a>
type <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_z46.htm#top" class="Hypertext">
</a>
</em>
diagram, redefined Controller in <a name="bls.LSControl">
 </a>
BlockingAccessPoint</p>
<dl>
<dt class="figur">
<a name="pgfId=224651">
 </a>
Figure 23:	 <a name="27007">
 </a>
<a name="21189">
 </a>
Redefined <a name="top">
 </a>
process type with added states and transitions</dt>
<dl>
<dt class="figurelink">
<a name="pgfId=224776">
 </a>
<a href="http://time.sintef9013.com/elb/sdl/sdl_f13.htm#top" class="Hypertext">
Open figure</a>
</dt>
</dl>
</dl>
<div>
<map name="sdl_t03-40">
<area shape="RECT" coords="162,14,269,28" href="http://time.sintef9013.com/elb/sdl/sdl_d40.htm#top">
<area shape="RECT" coords="162,14,269,28" href="http://time.sintef9013.com/elb/sdl/sdl_d40.htm#top">
<area shape="RECT" coords="262,63,311,92" href="http://time.sintef9013.com/elb/sdl/sdl_d40.htm#top">
<area shape="RECT" coords="262,106,311,148" href="http://time.sintef9013.com/elb/sdl/sdl_d48.htm#top">
<area shape="RECT" coords="262,248,318,283" href="http://time.sintef9013.com/elb/sdl/sdl_d46.htm#top">
<area shape="RECT" coords="262,198,311,226" href="http://time.sintef9013.com/elb/sdl/sdl_d47.htm#top">
<area shape="RECT" coords="35,318,85,347" href="http://time.sintef9013.com/elb/sdl/sdl_30.htm#top">
</map>
<img src="sdl_t01_data/sdl_t03-40.gif" usemap="#sdl_t03-40">
</div>
<p class="avsnitt">
<a name="pgfId=193017">
 </a>
&nbsp;</p>
<p class="avsnitt">
<a name="pgfId=55944">
 </a>
This process type defines the process type Controller (in block type 
BlockingAccessPoint) as a redefinition of the corresponding virtual 
process type in block type AccessPoint.</p>
<p class="avsnitt">
<a name="pgfId=8462">
 </a>
It is also specified that it inherits the same process type. This is, 
however, not necessary, as by default a redefinition of a virtual type 
without an explicit constraint will inherit the properties of the 
virtual type.</p>
<p class="avsnitt">
<a name="pgfId=9174">
 </a>
Inheritance of a process type implies inheritance of all states and 
transitions of the supertype. The asterisk state implies all states, 
also the inherited. The state Idle indicated as nextstate is the state 
Idle defined in the supertype.</p>
<p class="avsnitt">
<a name="pgfId=71856">
 </a>
For more details on this mechanisms, see <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d28.htm#top" class="Hypertext">
virtual types</a>
</em>
 and <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d27.htm#top" class="Hypertext">
specialisation</a>
</em>
.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=71858">
 </a>
save</h4>
<p class="avsnitt">
<a name="pgfId=71643">
 </a>
A <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_z47.htm#top" class="Hypertext">
save</a>
</em>
 specifies that the signals in the save symbol are retained in the input port in the order of their arrival.<img src="sdl_t01_data/sdl_t03-41.gif" align="LEFT">
</p>
<p class="avsnitt">
<a name="pgfId=71644">
 </a>
As specified in <a href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#27007" class="XRef">
<em class="Hyperlink">
Figure 23</em>
</a>
 (an asterisk save) all signals except Enable are saved. For a given state there may be only one asterisk save,</p>
<p class="avsnitt">
<a name="pgfId=71747">
 </a>
The effect of the save is valid only for the state to which the save is 
attached. In the following state, signal instances that have been 
"saved" are treated as normal signal instances.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=71691">
 </a>
asterisk state</h4>
<p class="avsnitt">
<a name="pgfId=71692">
 </a>
An <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_z48.htm#top" class="Hypertext">
asterisk state</a>
</em>
 is a shorthand for all states except those listed in an accompanying asterisk state list. <img src="sdl_t01_data/sdl_t03-42.gif" align="LEFT">
</p>
<p class="avsnitt">
<a name="pgfId=123426">
 </a>
The state names in an asterisk state list must be distinct and must be 
contained in other state list in the enclosing body or in the body of a 
supertype. As specified here, the asterisk state implies a state (with 
the corresponding transition) for each of the states except s1 and s2.</p>
<p class="over2">
<a name="pgfId=193677">
 </a>
<a name="35315">
 </a>
Process <a name="Process type diagram, finalised Controller in LoggingAccessPoint">
 </a>
type <a name="lls.LSControl">
 </a>
diagram, finalised Controller in LoggingAccessPoint</p>
<dl>
<dt class="figur">
<a name="pgfId=224929">
 </a>
Figure 24:	 <a name="25340">
 </a>
Finalised <a name="top">
 </a>
process type</dt>
<dl>
<dt class="figurelink">
<a name="pgfId=225079">
 </a>
<a href="http://time.sintef9013.com/elb/sdl/sdl_f14.htm#top" class="Hypertext">
Open figure</a>
</dt>
</dl>
</dl>
<div>
<map name="sdl_t03-43">
<area shape="RECT" coords="162,7,269,21" href="http://time.sintef9013.com/elb/sdl/sdl_d40.htm#top">
<area shape="RECT" coords="162,7,269,21" href="http://time.sintef9013.com/elb/sdl/sdl_d40.htm#top">
<area shape="RECT" coords="262,63,311,92" href="http://time.sintef9013.com/elb/sdl/sdl_d41.htm#top">
<area shape="RECT" coords="262,269,318,304" href="http://time.sintef9013.com/elb/sdl/sdl_d46.htm#top">
<area shape="RECT" coords="269,191,318,219" href="http://time.sintef9013.com/elb/sdl/sdl_d44.htm#top">
<area shape="RECT" coords="63,368,92,389" href="http://time.sintef9013.com/elb/sdl/sdl_14.htm#top">
</map>
<img src="sdl_t01_data/sdl_t03-43.gif" usemap="#sdl_t03-43">
</div>
<p class="avsnitt">
<a name="pgfId=193813">
 </a>
&nbsp;</p>
<p class="avsnitt">
<a name="pgfId=56135">
 </a>
This process type defines the process type Controller (in block type 
LoggingAccessPoint) as a finalised redefinition of the corresponding 
virtual process type in block type AccessPoint. This means that it is 
not virtual, so it can not be redefined in subtypes of the enclosing 
block type.</p>
<p class="avsnitt">
<a name="pgfId=8758">
 </a>
It is also specified that it inherits the same process type. This is, 
however, not necessary, as by default a redefinition of a virtual type 
without an explicit constraint will inherit the properties of the 
virtual type.</p>
<p class="avsnitt">
<a name="pgfId=10550">
 </a>
All transitions are inherited from the supertype, except the transitions
 starting with the state Validation and the signals OK and NOK. The are 
redefined in this process type.</p>
<p class="avsnitt">
<a name="pgfId=10552">
 </a>
For more details on this mechanisms, see <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d28.htm#top" class="Hypertext">
virtual types</a>
</em>
 and <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d27.htm#top" class="Hypertext">
specialisation</a>
</em>
.</p>
<p class="over2">
<a name="pgfId=8208">
 </a>
<a name="10481">
 </a>
Process <a name="Process diagram, Panel in terms of services">
 </a>
diagram, <a name="Panel">
 </a>
Panel in terms of services</p>
<dl>
<dt class="figur">
<a name="pgfId=225088">
 </a>
Figure 25:	 <a name="34277">
 </a>
<a name="41122">
 </a>
Process <a name="top">
 </a>
in terms of services</dt>
<dl>
<dt class="figurelink">
<a name="pgfId=225090">
 </a>
<a href="http://time.sintef9013.com/elb/sdl/sdl_f03.htm#top" class="Hypertext">
Open figure</a>
</dt>
</dl>
</dl>
<p class="avsnitt">
<a name="pgfId=225237">
 </a>
<map name="sdl_t03-44">
<area shape="RECT" coords="183,242,250,260" href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#PanelControl">
<area shape="RECT" coords="56,368,106,396" href="http://time.sintef9013.com/elb/sdl/sdl_31.htm#top">
<area shape="RECT" coords="134,378,191,389" href="http://time.sintef9013.com/elb/sdl/sdl_d14.htm#top">
<area shape="RECT" coords="276,385,325,396" href="http://time.sintef9013.com/elb/sdl/sdl_d33.htm#top">
<area shape="RECT" coords="318,0,361,25" href="http://time.sintef9013.com/elb/sdl/sdl_d11.htm#top">
<area shape="RECT" coords="170,9,255,42" href="http://time.sintef9013.com/elb/sdl/sdl_d13.htm#top">
</map>
<img src="sdl_t01_data/sdl_t03-44.gif" usemap="#sdl_t03-44" align="BOTTOM">
&nbsp;</p>
<p class="avsnitt">
<a name="pgfId=157594">
 </a>
&nbsp;</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=73730">
 </a>
process diagram</h4>
<p class="avsnitt">
<a name="pgfId=73731">
 </a>
A <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_z57.htm#top" class="Hypertext">
process diagram</a>
</em>
 defines the properties of a <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d08.htm#top" class="Hypertext">
process set</a>
</em>
, where each of the process instances in the set have the specified properties.</p>
<p class="avsnitt">
<a name="pgfId=73732">
 </a>
The behaviour of processes may be defined either by means of a procedure
 graph (states and transitions) or by means of a substructure of 
services connected by signal routes. The behaviour of each of the 
services is defined by means of states and transitions. The process 
defined in <a href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#34277" class="XRef">
<em class="Hyperlink">
Figure 25</em>
</a>
 is defined by means of <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d51.htm#top" class="Hypertext">
services</a>
</em>
.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=73956">
 </a>
process heading</h4>
<p class="avsnitt">
<a name="pgfId=73957">
 </a>
The <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_z16.htm#top" class="Hypertext">
heading</a>
</em>
 of process diagrams (defining a process set directly without any 
process type) defines the name of the process set and the 
initial/maximum number of instances in the set.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=73959">
 </a>
formal parameters</h4>
<p class="avsnitt">
<a name="pgfId=74020">
 </a>
If the process shall have formal parameters they are also specified as 
part of the process heading. Formal parameters are (local) variables of 
the process instances. They get values as part of the creation of the 
process instance.</p>
<p class="avsnitt">
<a name="pgfId=73960">
 </a>
When a system is created, the initial processes are created in arbitrary
 order. The formal parameters of these initial processes have no 
associated values; i.e. they are undefined.</p>
<p class="avsnitt">
<a name="pgfId=73961">
 </a>
If the initial number is omitted (as in <a href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#34277" class="XRef">
<em class="Hyperlink">
Figure 25</em>
</a>
), then the (default) value is 1. If the maximum number is omitted, then there is no limit on the number of instances.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=73846">
 </a>
service composition</h4>
<p class="avsnitt">
<a name="pgfId=73879">
 </a>
As defined in <a href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#34277" class="XRef">
<em class="Hyperlink">
Figure 25</em>
</a>
 the processes of this process set are defined by means of a composition of <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d51.htm#top" class="Hypertext">
services</a>
</em>
. Service instances are components of the process instance, and cannot 
be addressed as separate objects. They share the input port and the 
expressions self, parent, offspring and sender of the process instance.</p>
<p class="avsnitt">
<a name="pgfId=73902">
 </a>
A service instance is a state machine, and it is described as in <a href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#13086" class="XRef">
<em class="Hyperlink">
Figure 26</em>
</a>
.</p>
<p class="over2">
<a name="pgfId=194617">
 </a>
<a name="36146">
 </a>
Service <a name="Service diagram, PanelControl">
 </a>
diagram, <a name="PanelControl">
 </a>
PanelControl</p>
<dl>
<dt class="figur">
<a name="pgfId=225250">
 </a>
Figure 26:	 <a name="13086">
 </a>
<a name="10640">
 </a>
Service <a name="top">
 </a>
diagram, PanelControl</dt>
<dl>
<dt class="figurelink">
<a name="pgfId=225453">
 </a>
<a href="http://time.sintef9013.com/elb/sdl/sdl_f15.htm#top" class="Hypertext">
Open figure</a>
</dt>
</dl>
</dl>
<div>
<map name="sdl_t03-45">
<area shape="RECT" coords="31,122,72,137" href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#Procedure%20diagram,%20GetPIN">
</map>
<img src="sdl_t01_data/sdl_t03-45.gif" usemap="#sdl_t03-45">
</div>
<p class="avsnitt">
<a name="pgfId=194618">
 </a>
&nbsp;</p>
<p class="avsnitt">
<a name="pgfId=73916">
 </a>
When the process instance is created, the service starts are executed in
 arbitrary order. No state of any service is interpreted, before all 
service starts have been completed. A service start is considered 
completed when the service instance for the first time enters a state 
(possibly inside a called procedure) or interprets a stop.</p>
<p class="avsnitt">
<a name="pgfId=73917">
 </a>
Only one service at a time is executing a transition. When the executing
 service reaches a state, the next signal in the input port (which is 
not saved by the service, otherwise capable of consuming it) is given to
 the service that is capable of consuming it.</p>
<p class="avsnitt">
<a name="pgfId=73918">
 </a>
When a service ceases to exist, the input signals for that service are 
discarded. When all services have ceased to exist, the process instance 
ceases to exist.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=81146">
 </a>
variables in services</h4>
<p class="avsnitt">
<a name="pgfId=81147">
 </a>
Variables can be defined in processes, services and procedures. They are defined in text symbols.</p>
<p class="avsnitt">
<a name="pgfId=81149">
 </a>
Variables of services are created when the service is created as part of the creation of the containing process instance.</p>
<p class="avsnitt">
<a name="pgfId=81151">
 </a>
Variables will get default initial values if nothing else is specified.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=77996">
 </a>
procedure call with parameters</h4>
<p class="avsnitt">
<a name="pgfId=77997">
 </a>
A <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_d52.htm#top" class="Hypertext">
procedure<img src="sdl_t01_data/sdl_t03-46.gif" align="LEFT">
</a>
</em>
 may have formal parameters, and in the call the actual parameters are provided.</p>
<p class="avsnitt">
<a name="pgfId=78022">
 </a>
The pin parameter is in/out which means that the actual parameter 
corresponding to formal pin will be updated whenever the formal pin is 
updated within GetPIN. This is just like var parameters in Pascal or 
reference parameters in C++. The no_dig parameter is an in parameter 
which means that the procedure will have a local variable with the name 
of the parameter. This variable will assume the value of its 
corresponding actual argument at entry. Changes in the value of in 
parameters will not be transmitted to the actual argument. This is just 
like traditional value parameters.</p>
<p class="over2">
<a name="pgfId=57624">
 </a>
<a name="36020">
 </a>
Procedure <a name="Procedure diagram, GetPIN">
 </a>
diagram, GetPIN</p>
<dl>
<dt class="figur">
<a name="pgfId=227253">
 </a>
Figure 27:	 <a name="12064">
 </a>
<a name="top">
 </a>
<a name="29816">
 </a>
Procedure diagram, GetPIN</dt>
<dl>
<dt class="figurelink">
<a name="pgfId=227255">
 </a>
<a href="http://time.sintef9013.com/elb/sdl/sdl_f16..htm#top" class="Hypertext">
Open figure</a>
</dt>
</dl>
</dl>
<p class="avsnitt">
<a name="pgfId=227400">
 </a>
<map name="sdl_t03-47">
<area shape="RECT" coords="184,7,283,18" href="http://time.sintef9013.com/elb/sdl/sdl_d01.htm#top">
<area shape="RECT" coords="276,113,325,141" href="http://time.sintef9013.com/elb/sdl/sdl_53.htm#top">
<area shape="RECT" coords="273,293,325,304" href="http://time.sintef9013.com/elb/sdl/sdl_d55.htm#top">
<area shape="RECT" coords="276,354,318,365" href="http://time.sintef9013.com/elb/sdl/sdl_d01.htm#top">
<area shape="RECT" coords="276,49,325,77" href="http://time.sintef9013.com/elb/sdl/sdl_56.htm#top">
</map>
<img src="sdl_t01_data/sdl_t03-47.gif" usemap="#sdl_t03-47" align="BOTTOM">
&nbsp;</p>
<p class="avsnitt">
<a name="pgfId=132082">
 </a>
The PanelControl service referenced in <a href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#13086" class="XRef">
<em class="Hyperlink">
Figure "Service diagram, PanelControl"</em>
</a>
 is defined by the service diagram in <a href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#12064" class="XRef">
<em class="Hyperlink">
Figure "Procedure diagram, GetPIN"</em>
</a>
.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=73145">
 </a>
procedure </h4>
<p class="avsnitt">
<a name="pgfId=73146">
 </a>
<em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_z52.htm#top" class="Hypertext">
Procedures</a>
</em>
 define patterns of behaviour that processes/services may execute at 
several places or several times during their life-time. The behaviour of
 a procedure is defined in the same way as for processes (that is by 
means of states and transitions), a procedure may have (local) 
variables, and in addition it may have in, out, in/out parameters.</p>
<p class="avsnitt">
<a name="pgfId=78293">
 </a>
State names are not visible outside the procedure. The process states are not visible within the procedure.</p>
<p class="avsnitt">
<a name="pgfId=73337">
 </a>
The procedure in <a href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#12064" class="XRef">
<em class="Hyperlink">
Figure 27</em>
</a>
 accepts a number of Digits as input signals in the state WaitDigit. The
 local variable i is increased by one for each digit, and when i equals 
the required number of digits, the procedure returns.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=78324">
 </a>
local variable</h4>
<p class="avsnitt">
<a name="pgfId=81182">
 </a>
A procedure variable is a local variable within the procedure instance. 
It is created when the procedure start is interpreted, and it ceases to 
exist when the return of the procedure graph is interpreted. Variables 
will get default initial values if nothing else is specified.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=81183">
 </a>
procedure start</h4>
<p class="avsnitt">
<a name="pgfId=78338">
 </a>
The start transition of a procedure is slightly different from the the start of process/service.<img src="sdl_t01_data/sdl_t03-48.gif" align="LEFT">
</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=73373">
 </a>
return</h4>
<p class="avsnitt">
<a name="pgfId=73565">
 </a>
<img src="sdl_t01_data/sdl_t03-49.gif" align="LEFT">
<em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_z46.htm#top" class="Hypertext">
Procedure calls</a>
</em>
 may be actions or part of expressions (value returning procedures 
only). A value returning procedure is a procedure where an expression is
 associated with the return, and the value of this expression is 
returned.</p>
<p class="avsnitt">
<a name="pgfId=73277">
 </a>
The interpretation of a procedure call causes the creation of a 
procedure instance and the interpretation to commence in the following 
way:</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=73278">
 </a>
	formal parameter</h4>
<ol>
<p class="liste1">
<a name="pgfId=73309">
 </a>
1.	A local variable is created for each in parameter, having the name 
and sort of the in parameter. The variable gets the value of the 
expression given by the corresponding actual parameter if present. 
Otherwise the variable gets no value, i.e. it becomes "undefined".</p>
<p class="listeN">
<a name="pgfId=73314">
 </a>
2.		A formal parameter with no explicit attribute has an implicit in attribute.</p>
<p class="listeN">
<a name="pgfId=73317">
 </a>
3.	A local variable is created for each variable definition in the procedure-definition.</p>
<p class="listeN">
<a name="pgfId=73323">
 </a>
4.	Each in/out parameter denotes a variable which is given in the actual
 parameter expression. The contained Variable-name is used throughout 
the interpretation of the procedure graph when referring to the value of
 the variable or when assigning a new value to the variable.</p>
<p class="listeN">
<a name="pgfId=73326">
 </a>
5.	The transition contained in the &lt;<em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_z53.htm#top" class="Hypertext">
procedure start area</a>
</em>
&gt; is interpreted.</p>
</ol>
<p class="avsnitt">
<a name="pgfId=73284">
 </a>
The nodes of the procedure graph are interpreted in the same manner as 
the equivalent nodes of a process or service graph, i.e. the procedure 
has the same complete valid input signal set as the enclosing process, 
and the same input port as the instance of the enclosing process that 
has called it, either directly or indirectly.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=73217">
 </a>
<a name="remote procedures">
 </a>
remote procedures</h4>
<p class="avsnitt">
<a name="pgfId=79966">
 </a>
A procedure may be exported by a (server) process, so that other 
(clients) processes (clients) can request these procedures executed by 
the server.</p>
<p class="avsnitt">
<a name="pgfId=80000">
 </a>
The <em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_z59.htm#top" class="Hypertext">
remote procedure</a>
</em>
 mechanism consists of four interdependent language constructs:</p>
<ol>
<p class="liste1">
<a name="pgfId=79968">
 </a>
1.	<em class="Emphasis">
The exporting of a procedure</em>
. A procedure which is made visible by other processes is marked with 
the keyword exported preceding the procedure heading, e.g. "exported 
procedure Validate ..." from a process within the CentralUnit. The 
exporting process can control in which states it will accept the remote 
request. It may also specify to save the request to other states. The 
controlling of the acceptance is done by using input and save symbols 
with the remote procedure name preceded by the keyword procedure.</p>
<p class="listeN">
<a name="pgfId=79969">
 </a>
2.	<em class="Emphasis">
The importing of a procedure</em>
. When a process, service or procedure wants to import a remote 
procedure, it must specify the signature of this procedure in an 
"imported procedure specification" in a text area. The specification in 
our case would read: "imported procedure Validate; returns integer;" 
where the integer returned would give the result of the validation.</p>
<p class="listeN">
<a name="pgfId=79970">
 </a>
3.		<em class="Emphasis">
The specification of remote procedure</em>
. In SDL all names must be defined in a specific scope. Thus, the names 
of remote procedures must be defined in the context in which the actual 
definition of the procedure and the calls will be contained. In our case
 the definition of the procedure Validate is within the CentralUnit and 
the call is in Controller of the AccessPoint. The scope unit enclosing 
all these is the system itself. There we will find a text area with the 
following text: "remote procedure Validate; returns integer;".</p>
<p class="listeN">
<a name="pgfId=79971">
 </a>
4.	<em class="Emphasis">
The calling of a remote procedure</em>
. The calling of the remote procedure is indistinguishable from local 
procedure calls unless the caller explicitly states which process it 
will request the procedure executed by. This can be done by a to-clause 
with a PId following the procedure name of the call.</p>
</ol>
<p class="avsnitt">
<a name="pgfId=79972">
 </a>
Remote procedures may be value returning (as in our example above), and they may be virtual.</p>
<p class="avsnitt">
<a name="pgfId=122443">
 </a>
Block diagram, <a name="CentralUnit">
 </a>
CentralUnit</p>
<dl>
<dt class="figur">
<a name="pgfId=227112">
 </a>
Figure 28:	 <a name="13251">
 </a>
<a name="28157">
 </a>
Block <a name="top">
 </a>
diagram defining the CentralUnit</dt>
<dl>
<dt class="figurelink">
<a name="pgfId=227244">
 </a>
<a href="http://time.sintef9013.com/elb/sdl/sdl_f11.htm#top" class="Hypertext">
Open figure</a>
</dt>
</dl>
</dl>
<div>
<map name="sdl_t03-50">
<area shape="RECT" coords="148,229,219,240" href="http://time.sintef9013.com/elb/sdl/sdl_d35.htm#top">
<area shape="RECT" coords="70,243,127,255" href="http://time.sintef9013.com/elb/sdl/sdl_d14.htm#top">
<area shape="RECT" coords="14,233,63,245" href="http://time.sintef9013.com/elb/sdl/sdl_d33.htm#top">
<area shape="RECT" coords="113,7,212,18" href="http://time.sintef9013.com/elb/sdl/sdl_d15.htm#top">
<area shape="RECT" coords="347,0,389,25" href="http://time.sintef9013.com/elb/sdl/sdl_d11.htm#top">
<area shape="RECT" coords="255,7,311,39" href="http://time.sintef9013.com/elb/sdl/sdl_d13.htm#top">
</map>
<img src="sdl_t01_data/sdl_t03-50.gif" usemap="#sdl_t03-50">
</div>
<p class="avsnitt">
<a name="pgfId=157629">
 </a>
&nbsp;</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=82805">
 </a>
create</h4>
<p class="avsnitt">
<a name="pgfId=82807">
 </a>
<a href="http://time.sintef9013.com/elb/sdl/sdl_z59.htm#top" class="Hypertext">
A process may </a>
<em class="HyperlinkNewWindow">
<a href="http://time.sintef9013.com/elb/sdl/sdl_z60.htm#top" class="Hypertext">
create</a>
</em>
 processes in other process sets in the same block, possibly providing actual parameters to the new instance.</p>
<p class="avsnitt">
<a name="pgfId=82808">
 </a>
The create line (dashed line with arrowhead) indicates possible creations.</p>
<p class="avsnitt">
<a name="pgfId=83095">
 </a>
Create lines are optional.</p>
</div>
<div>
<h4 class="SideH">
<a name="pgfId=83099">
 </a>
create action</h4>
<p class="avsnitt">
<a name="pgfId=83124">
 </a>
As specified in <a href="http://time.sintef9013.com/elb/sdl/sdl_t03.htm#13251" class="XRef">
<em class="Hyperlink">
Figure 28</em>
</a>
 the process CUControl creates Validation processes. In the process 
graph of CUControl, the creation will be specified by a create action.</p>
</div>
</div>


</body></html>